package com.peng.jiuan.utils;

import cn.dev33.satoken.spring.SpringMVCUtil;
import com.peng.jiuan.result.AjaxException;

/**
 * @author 彭鹏
 * @date 2021/11/10.
 * ip限流
 */
public class IpCheckUtil {

    /**
     *  持久化的key
     */
    static String key = "sys_ck_ip:";


    /**
     * 指定ip的访问点设置为
     * @param ip
     */
    public static void setNow(String ip){
        RedisUtil.set(key + ip, System.currentTimeMillis() + "");
    }
    public static void setNow(){
        setNow(getMyIp());
    }

    /**
     * 返回指定ip上一次接入是几秒前
     * @param ip
     * @return
     */
    public static long getTs(String ip){
        String str = RedisUtil.get(key + ip);
        if(str == null) {
            str = "0";
        }
        return (System.currentTimeMillis() - Long.parseLong(str)) / 1000;
    }
    public static long getTs(){
        return getTs(getMyIp());
    }

    /**
     * 检查指定ip是否属于频繁访问 ，如果是，则抛出异常 , 参数：ip、频繁秒数
     * @param ip
     * @param s
     */
    public static void checkIp(String ip, int s) {
        if(IpCheckUtil.getTs(ip) < s){
            throw AjaxException.get("操作频繁，请稍后尝试");
        }
    }
    public static void checkIp(int s) {
        checkIp(getMyIp(), s);
    }



    // 返回我的ip
    private static String getMyIp() {
        String ip = WebUtil.getIp(SpringMVCUtil.getRequest());
        return ip;
    }

}
